Clap Lights
Introduction
The new micro:bits have a microphone to help them detect sound 🎤
Let’s learn how to use a clap 👏 to switch your micro:bit’s lights on and off!

Setting up the sound input
► From the ||input:Input|| category, find the ||input:on [loud] sound|| container and add it to your workspace.
// @highlight
input.onSound(DetectedSound.Loud, function () {
})
Creating a lightsOn variable
Let’s begin by creating a variable to keep track of whether the micro:bit’s lights are on or off.
► In the ||variables:Variables|| category, click on Make a Variable... and make a variable named lightsOn.
Displaying LEDs part 1
In this step, we’ll be using an if then / else statement.
► From the ||logic:Logic|| category, grab an ||logic:if <true> then / else|| block and snap it into your ||input:on [loud] sound|| container.
► Look in the ||variables:Variables|| category. Find the new ||variables:lightsOn|| variable and snap it in to replace the ||logic:<true>|| value in your ||logic:if <true> then / else|| statement.
let lightsOn = 0
input.onSound(DetectedSound.Loud, function () {
// @highlight
if (lightsOn) {
} else {
}
})
Displaying LEDs part 2
► From ||basic:Basic||, grab ||basic:show leds|| and snap it into the top container of your ||logic:if then / else|| statement.
► Set the lights to a pattern you like!
💡 In the hint, we chose to turn on all of the outside lights. Feel free to make your own design 🎨
let lightsOn = 0
input.onSound(DetectedSound.Loud, function () {
if (lightsOn) {
// @highlight
basic.showLeds(`
# # # # #
# . . . #
# . . . #
# . . . #
# # # # #
`)
} else {
}
})
Clearing the screen
► From ||basic:Basic||, find ||basic:clear screen|| and snap it into the bottom container of your ||logic:if then / else|| section.
💡 This will turn the display off if lightsOn is not true.
let lightsOn = 0
input.onSound(DetectedSound.Loud, function () {
if (lightsOn) {
basic.showLeds(`
# # # # #
# . . . #
# . . . #
# . . . #
# # # # #
`)
} else {
// @highlight
basic.clearScreen()
}
})
Setting the lightsOn variable
Just like we’d toggle a light switch, each time we clap, we want to flip the variable lightsOn to the opposite of what it was before.
► From ||variables:Variables||, locate ||variables:set [lightsOn] to [0]|| and snap it in at the very top of your ||input:on [loud] sound|| container.
► From the ||logic:Logic|| category, find the ||logic:not <>|| operator and use it to replace the [0] in ||variables:set [lightsOn] to [0]||.
► From ||variables:Variables||, grab ||variables:lightsOn|| and snap it into the empty part of the ||logic:not <>|| operator.
let lightsOn = false
input.onSound(DetectedSound.Loud, function () {
// @highlight
lightsOn = !(lightsOn)
if (lightsOn) {
basic.showLeds(`
# # # # #
# . . . #
# . . . #
# . . . #
# # # # #
`)
} else {
basic.clearScreen()
}
})
Testing in the simulator
► Check out the simulator!
► Click on the pink slider bar beneath the microphone icon and drag it up and down.
💡 Right now, your micro:bit thinks that anything above 128 is loud. Every time the sound goes > 128, your lights should switch on/off.
Set loud sound threshold
Your micro:bit might detect sounds when you don’t want it to. Setting a sound threshold could help 🔉🔊
► Click on the ||input:Input|| category. A new category should show up beneath it called ||input:...more||.
► From ||input:...more||, grab ||input:set [loud] sound threshold to [128]|| and snap it into your empty ||basic: on start|| container.
💡 Try to change the value of your sound threshold so that every time you clap, your lights will turn on if they are off and vice versa.
// @highlight
input.setSoundThreshold(SoundThreshold.Loud, 150)
Testing, round 2
Don’t forget to test your code in the simulator!
If you have a new micro:bit (the one with the shiny gold logo at the top), download this code and try it out!
let lightsOn = false
input.onSound(DetectedSound.Loud, function () {
lightsOn = !(lightsOn)
if (lightsOn) {
basic.showLeds(`
# # # # #
# . . . #
# . . . #
# . . . #
# # # # #
`)
} else {
basic.clearScreen()
}
})
input.setSoundThreshold(SoundThreshold.Loud, 150)
# BlocksExistValidator
//